home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Technotools
/
Technotools (Chestnut CD-ROM)(1993).ISO
/
lantools
/
an105x
/
listen.c
< prev
Wrap
C/C++ Source or Header
|
1991-04-09
|
2KB
|
98 lines
/*****************************************************************************
* LISTEN.C
*
* 91-04-05 Matt Hagen, Novell, Inc.
*****************************************************************************/
#include "ipx.h"
#define WELL_KNOWN_SOCKET 0x2361 /* backwards */
#define RX_DATA_SIZE 50
#define TX_DATA_SIZE 50
#define STATUS_RUN 0
#define STATUS_UNLOAD 1
extern void SignalRoutine(
void);
SESSION *s;
BYTE statusFlag=STATUS_RUN;
int exitThread=NULL;
/*****************************************************************************
* main
*****************************************************************************/
main(
int argc,
char *argv[])
{
IPX_ECB *rx;
IPX_ECB *rxList;
signal(SIGTERM,SignalRoutine);
s=AllocateIPXResources(WELL_KNOWN_SOCKET,NULL,8,RX_DATA_SIZE,3,TX_DATA_SIZE);
if(s==NULL)
{
ConsolePrintf(" Error allocating session.\n");
statusFlag=STATUS_UNLOAD;
goto exit0;
}
while(TRUE)
{
WaitOnLocalSemaphore(s->semaphore);
if(statusFlag==STATUS_UNLOAD)
goto exit1;
rx=IpxGetAndClearQ(&s->rxHead);
rxList=rx->prev;
rx->prev=NULL;
while(rxList!=NULL)
{
rx=rxList;
rxList=rx->prev;
/* process rx */
ConsolePrintf(" *** ");
IpxReceive(NULL,rx);
if(rxList!=NULL)
WaitOnLocalSemaphore(s->semaphore);
ThreadSwitch();
if(statusFlag==STATUS_UNLOAD)
goto exit1;
}
}
exit1:;
DeallocateIPXResources(s);
exit0:;
if(exitThread!=NULL)
ResumeThread(exitThread);
}
/*****************************************************************************
* SignalRoutine
*****************************************************************************/
void SignalRoutine(
void)
{
exitThread=GetThreadID();
statusFlag=STATUS_UNLOAD;
SignalLocalSemaphore(s->semaphore);
SuspendThread(exitThread);
}
/****************************************************************************/
/****************************************************************************/